
export function isvalidUsername(str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

/* 合法uri*/
export function validateURL(textval) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

/* 小写字母*/
export function validateLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 大写字母*/
export function validateUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 大小写字母*/
export function validatAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}
/**
 * 判断是否为空
 */
export function validatenull(val) {
  if (typeof val === 'boolean') {
    return false
  }
  if (val instanceof Array) {
    if (val.length === 0) return true
  } else if (val instanceof Object) {
    if (JSON.stringify(val) === '{}') return true
  } else {
    if (val === 'null' || val == null || val === 'undefined' || val === undefined || val === '') return true
    return false
  }
  return false
}

/**
 * 判断手机号码是否正确
 */
export function isvalidatemobile(phone) {
  const list = []
  let result = true
  let msg = ''
  var isPhone = /^0\d{2,3}-?\d{7,8}$/
  // 增加134 减少|1349[0-9]{7}，增加181,增加145，增加17[678]
  // const isMob = /^((\+?86)|(\(\+86\)))?(13[0123456789][0-9]{8}|15[012356789][0-9]{8}|18[012356789][0-9]{8}|14[57][0-9]{8}|17[3678][0-9]{8})$/
  if (!validatenull(phone)) {
    if (phone.length === 11) {
      if (isPhone.test(phone)) {
        msg = '手机号码格式不正确'
      } else {
        result = false
      }
    } else {
      msg = '手机号码长度不为11位'
    }
  } else {
    msg = '手机号码不能为空'
  }
  list.push(result)
  list.push(msg)
  return list
}

/**
 * 检验身份证
 */
export function validateIdCard(idcard) {
  // 判断如果传入的不是一个字符串，则转换成字符串
  idcard = typeof idcard === 'string' ? idcard : String(idcard);
  // 正则表达式验证号码的结构
  const regx = /^[\d]{17}[0-9|X|x]{1}$/;
  if (regx.test(idcard)) {
    // 验证前面17位数字，首先定义前面17位系数
    const sevenTeenIndex = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 截取参数前17位
    const front_seventeen = idcard.slice(0, 17);
    // 截取第18位
    let eighteen = idcard.slice(17, 18);
    // 这里如果是X要转换成小写，如果是数字在这里是字符串类型,则转换成数字类型，好做判断
    eighteen = isNaN(parseInt(eighteen)) ? eighteen.toLowerCase() : parseInt(eighteen);
    // 定义一个变量计算系数乘积之和余数
    let remainder = 0;
    // 利用循环计算前17位数与系数乘积并添加到一个数组中
    // charAt()类似数组的访问下标一样，访问单个字符串的元素,返回的是一个字符串因此要转换成数字
    for (let i = 0; i < 17; i++) {
      remainder = (remainder += parseInt(front_seventeen.charAt(i)) * sevenTeenIndex[i]) % 11;
    }
    // 余数对应数字数组
    const remainderKeyArr = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
    // 取得余数对应的值
    const remainderKey = remainderKeyArr[remainder] === 'X' ? remainderKeyArr[remainder].toLowerCase() : remainderKeyArr[remainder];
    console.log(remainderKey);
    console.log(eighteen)
    // 如果最后一位数字对应上了余数所对应的值，则验证合格，否则不合格,
    // 由于不确定最后一个数字是否是大小写的X，所以还是都转换成小写进行判断
    if (eighteen === remainderKey) {
      return idcard;
    } else {
      console.log('你输入的身份证号码格式不对!')
      return false;
    }
  } else {
    console.log('你输入的身份证号码格式不对,请重新输入!');
    return false;
  }
}
